package 简单.滑动窗口;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 给你一个下标从 0 开始的整数数组 nums 和两个整数 key 和 k 。K 近邻下标 是 nums 中的一个下标 i ，
 * 并满足至少存在一个下标 j 使得 |i - j| <= k 且 nums[j] == key 。
 * 以列表形式返回按 递增顺序 排序的所有 K 近邻下标。
 *
 * @ https://leetcode.cn/problems/find-all-k-distant-indices-in-an-array/description/?envType=daily-question&envId=2025-06-24
 * @date 2025/06/24
 */
public class 找出数组中的所有K近邻下标_2200 {

    public static void main(String[] args) {

    }

    /**
     * 哈希表+遍历
     */
    public List<Integer> findKDistantIndices(int[] nums, int key, int k) {

        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == key) {
                for (int j = Math.max(i - k, 0); j <= Math.min(i + k, nums.length - 1); j++) {
                    set.add(j);
                }
            }
        }

        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            if (set.contains(i)) {
                list.add(i);
            }
        }
        return list;

    }

    // 差分数组

}
